########## RANDOM CHOICE MODEL ##########

Random_Choice_Model = function(seuil, kredit_learning, kredit_validation) 
{

# Selection de variables selon la methode du "random choice"
cat("Random Choice Model : \n")
# Generation de la matrice de correlation des covariables avec la classe kredit
correlation <- cor(kredit, kredit$kredit)
# Tri de ces correlations par ordre decroissant
correlation_triees <- as.matrix(sort(abs(correlation )[,1], decreasing =T))
# Calcul du nombre de variable a selectionner
correlations_a_selectionnees <- correlation_triees > seuil
nb_variables <- as.vector(correlations_a_selectionnees) %*% correlations_a_selectionnees - 1
cat("Nombre de variables choisies :",nb_variables,"\n")
# Selection des variables
correlations_selectionnees <- correlation_triees[2:(nb_variables+1),1]
noms_correlations_selectionnees <- as.matrix(names(correlations_selectionnees))
cat("Variables choisies : ",noms_correlations_selectionnees,"\n")


# Matrice des combinaisons de 4 variables parmi les 7
combis <- combn(noms_correlations_selectionnees, 4)
ncombis = (ncol(combis))
indices <- sample(1:ncombis,ncombis)
combinaisons = matrix(0,ncombis,4)
for(i in 1:ncombis){
	combinaisons[i,] <- combis[,indices[i]]
}

erreur <- c(1:nrow(combinaisons))
labels <- c(1:nrow(combinaisons))
score <- matrix(0,nrow(combinaisons),nrow(kredit_validation))
pred =  matrix(-1,nrow(kredit_validation),ncombis)
for (i in 1:nrow(combinaisons))
{
	# Mise en forme des nom de variables pour la procedure GLM
	formula <- as.formula(paste("kredit ~ ", paste(combinaisons[i,], collapse="+") , sep=" "))

	labels[i] <- i
	# Calcul des coefficients de la fonction score avec la procedure GLM
	(GLM.1 <- glm(formula,  family=binomial(logit), data=kredit_learning))

	# Calcul des scores
	score[i,] <- predict(GLM.1,type="resp",newdata=kredit_validation)

	# Affectation au groupe d'appartenance
	(pred[,i] <-ifelse(score[i,]<0.5,0,1))

	# Calcul de l'erreur
	mc <- table(kredit_validation$kredit,pred[,i])
	erreur[i] <- 0.05*(mc[1,2]/sum(mc)) + 0.95*(mc[2,1]/sum(mc))
}

vecteur_erreur <- data.frame(combinaisons,erreur)
#(vecteur_erreur <- as.matrix(sort(test[,5], decreasing=F)))

vecteur_score <- t(score)
row.names(vecteur_score) = row.names(kredit_validation)

return (vecteur_score)
}
